package at.spengergasse.dao.derby;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

import java.sql.Connection;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

import at.spengergasse.dao.ProdukteDao;
import at.spengergasse.dao.util.JDBCConnectionController;
import at.spengergasse.model.Produkte;

public class ProdukteDaoDerbyImplTest
{

	private static Connection connection;
	private static ProdukteDao dao;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception
	{
		connection = JDBCConnectionController.getConnection();
		dao = new ProdukteDaoDerbyImpl();
	}

	@Test
	public void testInsertStmt()
	{
		Produkte p = new Produkte(null, "Smallworld", (float) 56.50, "14-99",
				"2-5", (long) 2, "Strategie");
		int numberOfRecords = dao.save(connection, p);
		System.out.println(numberOfRecords);
		assertEquals(1, numberOfRecords);
		assertNotNull(p.getId());
		List<Produkte> produkte = dao.findAll(connection);
		assertEquals(3, produkte.size());
	}

	@Test
	public void testSaveExisting()
	{
		Produkte existingP = dao.findById(connection, Long.valueOf(1));
		existingP.setTitel("newTitel");
		dao.save(connection, existingP);
		Produkte checkP = dao.findById(connection, Long.valueOf(1));
		assertEquals("newTitel", checkP.getTitel());
	}

	@Test
	public void testDelete()
	{
		dao.save(connection, new Produkte(null, "neuesSpiel", (float) 45.50,
				"10-99", "2-6", (long) 2, "Spass"));
		List<Produkte> listP = dao.findAll(connection);
		assertEquals(4, listP.size());
		Produkte produkte = listP.get(2);
		dao.delete(connection, produkte);
		List<Produkte> rereadP = dao.findAll(connection);
		assertEquals(3, rereadP.size());
	}

	@Test
	public void testFindById()
	{
		Produkte p = dao.findById(connection, Long.valueOf(2));
		assertEquals("Kakerlakensalat", p.getTitel());
		assertEquals("3-6", p.getSpielerAnzahl());
	}

	@Test
	public void testFindByIdWithNonExistingId()
	{
		Produkte p = dao.findById(connection, Long.valueOf(999));
		assertNull(p);
	}

	@Test
	public void testFindAll()
	{
		List<Produkte> listP = dao.findAll(connection);
		assertEquals(3, listP.size());
		assertEquals("newTitel", listP.get(0).getTitel());
	}

	@Test
	public void testFindByTitel()
	{
		Produkte p = dao.findByTitel(connection, "Kakerlakensalat");
		System.out.println(p.getTitel());
		assertEquals("Kakerlakensalat", p.getTitel());
		// assertEquals(19.90, p.getPreis());
	}

}
